home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -screenplay- / hd_installers / -whdload- / whdload_dev / src / slave-examples / oscar.asm < prev    next >
Assembly Source File  |  2000-02-28  |  6KB  |  242 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    oscar.asm
  3. ;  :Contents.    Slave for "Oscar"
  4. ;  :Author.    wepl <wepl@whdload.org>
  5. ;  :Original.    v1 Desktop Dynamite <wepl@whdload.org>
  6. ;        v2
  7. ;        v3 CD³²
  8. ;  :Version.    $Id: oscar.asm 1.9 2000/01/23 21:02:51 jah Exp jah $
  9. ;  :History.    20.05.96
  10. ;        16.06.97 updated for slave version 2
  11. ;        15.08.97 update for key managment
  12. ;        15.07.98 cache on 68040+ disabled
  13. ;        08.05.99 adapted for WHDLoad 10.0, access faults removed
  14. ;        08.12.99 support for v2 added
  15. ;        16.01.00 support for v3 added
  16. ;  :Requires.    -
  17. ;  :Copyright.    Public Domain
  18. ;  :Language.    68000 Assembler
  19. ;  :Translator.    Barfly V2.9
  20. ;  :To Do.
  21. ;---------------------------------------------------------------------------*
  22.  
  23.     INCDIR    Includes:
  24.     INCLUDE    whdload.i
  25.     INCLUDE    whdmacros.i
  26.  
  27.     IFD BARFLY
  28.     OUTPUT    "wart:o/oscar/Oscar.Slave"
  29.     ;OUTPUT    "wart:o/oscar cd³²/Oscar.Slave"
  30.     BOPT    O+                ;enable optimizing
  31.     BOPT    OG+                ;enable optimizing
  32.     BOPT    ODd-                ;disable mul optimizing
  33.     BOPT    ODe-                ;disable mul optimizing
  34.     BOPT    w4-                ;disable 64k warnings
  35.     SUPER                    ;disable supervisor warnings
  36.     ENDC
  37.  
  38.     STRUCTURE    globals,$100
  39.         LONG    _resload
  40.         LONG    _chipptr
  41.         LABEL    gl_ENDOF
  42.  
  43. ;============================================================================
  44.  
  45. _base        SLAVE_HEADER            ;ws_Security + ws_ID
  46.         dc.w    10            ;ws_Version
  47.         dc.w    WHDLF_NoError        ;ws_flags
  48. _upchip        dc.l    $181000            ;ws_BaseMemSize 
  49.                         ;floppy vers need only $177000
  50.         dc.l    0            ;ws_ExecInstall
  51.         dc.w    _Start-_base        ;ws_GameLoader
  52.         dc.w    _data-_base        ;ws_CurrentDir
  53.         dc.w    0            ;ws_DontCache
  54. _keydebug    dc.b    0            ;ws_keydebug
  55. _keyexit    dc.b    $59            ;ws_keyexit = F10
  56. _expmem        dc.l    0            ;ws_ExpMem
  57.         dc.w    _name-_base        ;ws_name
  58.         dc.w    _copy-_base        ;ws_copy
  59.         dc.w    _info-_base        ;ws_info
  60.  
  61. ;============================================================================
  62.  
  63.     IFD BARFLY
  64.     IFND    .passchk
  65.     DOSCMD    "WDate  >T:date"
  66. .passchk
  67.     ENDC
  68.     ENDC
  69.  
  70. _data        dc.b    "data",0
  71. _name        dc.b    "Oscar",0
  72. _copy        dc.b    "1993 Flair Software",0
  73. _info        dc.b    "installed & fixed by Wepl",10
  74.         dc.b    "version 1.7 "
  75.     IFD BARFLY
  76.         INCBIN    "T:date"
  77.     ENDC
  78.         dc.b    0
  79.     EVEN
  80.  
  81. ;============================================================================
  82. _Start        ;    A0 = resident loader
  83. ;============================================================================
  84.  
  85.     ;save resload base
  86.         move.l    a0,(_resload)            ;save
  87.         move.l    a0,a5                ;A5 = resload
  88.  
  89.     ;set start address for emulated exec.AllocMem
  90.         move.l    #$400,(_chipptr)
  91.  
  92.     ;enable caches
  93.         move.l    #WCPUF_NWA|WCPUF_Base_WT,d0
  94.         move.l    #WCPUF_NWA|WCPUF_Base,d1
  95.         jsr    (resload_SetCPU,a5)
  96.  
  97.     ;load main
  98.         lea    (_exe,pc),a0            ;name
  99.         move.l    (_chipptr),a1            ;address
  100.         move.l    a1,a4                ;A4 = executable
  101.         jsr    (resload_LoadFileDecrunch,a5)
  102.     ;relocate main
  103.         move.l    a4,a0                ;address
  104.         sub.l    a1,a1                ;taglist
  105.         jsr    (resload_Relocate,a5)
  106.         move.l    d0,d4                ;D4 = executable length
  107.         add.l    d0,(_chipptr)
  108.     ;fix empty dbf loops
  109.         move.l    a4,a0                ;start
  110.         lea    (a0,d0.l),a1            ;end
  111.         lea    (gl_ENDOF),a2            ;temp
  112.         bsr    _dbffix
  113.     ;check version & apply patches
  114.         lea    (_pexe1,pc),a0            ;patchlist
  115.         cmp.l    #$2f2d4,d4
  116.         beq    .patch
  117.         lea    (_pexe2,pc),a0            ;patchlist
  118.         cmp.l    #$2cf58,d4
  119.         beq    .patch
  120.         lea    (_pexe3,pc),a0            ;patchlist
  121.         cmp.l    #$a80d8,d4
  122.         beq    .patch
  123.         pea    TDREASON_WRONGVER
  124.         jmp    (resload_Abort,a5)
  125.         
  126. .patch        move.l    a4,a1                ;address
  127.         jsr    (resload_Patch,a5)
  128.  
  129.     ;init ints
  130.         lea    (_vbi,pc),a0
  131.         move.l    a0,($6c)
  132.  
  133.     ;start main
  134.         jmp    ($3e,a4)
  135.  
  136. _pexe1        PL_START
  137.         PL_P    $8b4e,_allocmem            ;emulate
  138.         PL_S    $276,$2a8-$276            ;disable os-stuff
  139.         PL_P    $7b1a,_loader
  140.         PL_W    $1ce2,$e841            ;lsr.w  -> asr.w
  141.         PL_W    $1ce4,$c3fc            ;mulu   -> muls
  142.         PL_W    $1cfc,$d0c1            ;adda.l -> adda.w
  143.         PL_W    $1e0e,$e841            ;lsr.w  -> asr.w
  144.         PL_W    $1e10,$c3fc            ;mulu   -> muls
  145.         PL_W    $1e28,$d0c1            ;adda.l -> adda.w
  146.         PL_S    $9764,$99fc-$9764        ;copylock
  147.         PL_END
  148.  
  149. _pexe2        PL_START
  150.         PL_P    $8b56,_allocmem            ;emulate
  151.         PL_S    $276,$2a8-$276            ;disable os-stuff
  152.         PL_P    $7b22,_loader
  153.         PL_W    $1cbc,$e841            ;lsr.w  -> asr.w
  154.         PL_W    $1cbe,$c3fc            ;mulu   -> muls
  155.         PL_W    $1cd6,$d0c1            ;adda.l -> adda.w
  156.         PL_W    $1de8,$e841            ;lsr.w  -> asr.w
  157.         PL_W    $1dea,$c3fc            ;mulu   -> muls
  158.         PL_W    $1e02,$d0c1            ;adda.l -> adda.w
  159.         PL_S    $976c,$9a04-$976c        ;copylock
  160.         PL_END
  161.  
  162. _pexe3        PL_START
  163.         PL_P    $76fc,_allocmem            ;emulate
  164.         PL_S    $200,$254-$200            ;disable os-stuff
  165.     ;    PL_W    $b48e,$4e73            ;jmp to org vbi -> rte
  166.         PL_S    $750e,$86-$e            ;skip os-restore
  167.         PL_S    $75a8,10            ;skip open
  168.         PL_PS    $75de,_loadercd
  169.         PL_S    $7630,14+$14            ;skip os-save
  170.         PL_PS    $330,_enabledma
  171.         PL_W    $199c,$e841            ;lsr.w  -> asr.w
  172.         PL_W    $199e,$c3fc            ;mulu   -> muls
  173.         PL_W    $19b0,$d0c1            ;adda.l -> adda.w
  174.         PL_W    $1ac2,$e841            ;lsr.w  -> asr.w
  175.         PL_W    $1ac4,$c3fc            ;mulu   -> muls
  176.         PL_W    $1ad6,$d0c1            ;adda.l -> adda.w
  177.         PL_END
  178.  
  179. ;--------------------------------
  180.  
  181. _vbi        move.w    #INTF_VERTB,(_custom+intreq)
  182.         rte
  183.  
  184. ;--------------------------------
  185.  
  186. _allocmem    addq.l    #7,d0                ;round up
  187.         and.b    #$f8,d0
  188.  
  189.         move.l    (_chipptr),a1
  190.         add.l    d0,(_chipptr)
  191.     IFEQ 0
  192.         move.l    (_chipptr),d1
  193.         cmp.l    (_upchip,pc),d1
  194.         blo    .0
  195.         illegal
  196. .0
  197.     ENDC
  198.         move.l    a1,a0
  199.         lsr.l    #3,d0
  200. .clr        clr.l    (a0)+
  201.         clr.l    (a0)+
  202.         subq.l    #1,d0
  203.         bne    .clr
  204.         move.l    a1,d0
  205.         rts
  206.  
  207. ;--------------------------------
  208.  
  209. _loader        addq.l    #4,a0                ;skip "df0:"
  210.         move.l    a2,-(a7)
  211.         move.l    (_resload),a2
  212.         jsr    (resload_LoadFileDecrunch,a2)
  213.         move.l    (a7)+,a2
  214.         moveq    #0,d0                ;return code
  215.         rts
  216.  
  217. _loadercd    addq.l    #6,a0
  218.         move.l    d2,a1
  219.         move.l    (_resload),a2
  220.         jsr    (resload_LoadFileDecrunch,a2)
  221.         add.l    #14,(a7)
  222.         rts
  223.  
  224. ;--------------------------------
  225.  
  226. _enabledma    move.w    #$c028,(intena,a6)
  227.         waitvb    a6
  228.         move.w    #$86e0!DMAF_RASTER,(dmacon,a6)
  229.         rts
  230.  
  231. ;--------------------------------
  232.  
  233. _exe        dc.b    "exe",0
  234.  
  235. ;============================================================================
  236.  
  237.         INCLUDE    sources:whdload/dbffix.s
  238.  
  239. ;============================================================================
  240.  
  241.     END
  242.